package com.xiaoshuidi.cloud.module.contract.controller.admin.bill.vo.rentOrder;


import cn.hutool.json.JSONObject;
import com.xiaoshuidi.cloud.module.contract.controller.admin.bill.vo.orderFees.OrderFeesVo;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.Booking;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/*
 * 生成账单的接口
 *
 * */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RentOrderVO {

    /**
     * 合同id
     */
    @Schema(description = "合同id")
    private Long contractId;

    /**
     * 公寓id
     */
    @Schema(description = "公寓id")
    private Long apartmentId;
    /**
     * 公寓名称
     */
    @Schema(description = "公寓名称")
    private String apartmentName;

    /**
     * 关联房间
     */
    @Schema(description = "关联房间id")
    private Long roomId;

    /**
     * 房间名称
     */
    @Schema(description = "房间名称")
    private String roomName;
    /**
     * 租客手机号
     */
    private String customerName;

    /**
     * 租客手机号
     */
    private String customerPhone;

    /**
     * 合同开始时间
     */
    @Schema(description = "合同开始时间")
    @NotNull(message = "合同开始时间不能为空")
    private LocalDate startTime;

    /**
     * 合同结束时间
     */
    @Schema(description = "合同结束时间")
    @NotNull(message = "合同结束时间不能为空")
    private LocalDate endTime;

    /**
     * 账单类型 default 合同账单| custom 杂费账单| free  免租期账单| meter  抄表账单| carry 结转账单 | owner 业主账单
     */
    private String orderType;
    /**
     * 月租金
     */
    @Schema(description = "月租金")
    @NotNull(message = "月租金不能为空")
    private BigDecimal monthRent;

    /**
     * 押金
     */
    @Schema(description = "押金")
    private BigDecimal deposit;

    /**
     * 原押金
     */
    @Schema(description = "原押金")
    private BigDecimal oldDeposit ;

    /**
     * 物业费
     */
    @Schema(description = "物业费")
    @NotNull(message = "物业费不能为空")
    private BigDecimal property;

    /**
     * 已付金额
     * */
    private BigDecimal paidRentUtilities;

    /**
     * 收款周期类型 1月付 3 季付 6 半年付 12 半年付  0 其他
     */
    @Schema(description = "收款周期类型 1月付 3 季付 6 半年付 12 半年付  0 其他")
    private Integer payMethodF;

    /**
     * 是否按自然月生成账 FALSE 否   TRUE 是
     */
    @Schema(description = "是否按自然月生成账 FALSE 否   TRUE 是")
    private Boolean isNatureMonth;


    /**
     * 收款类型 advanced  提前收租天 | fixed 固定当月日期 日 | prefixed 固定上月日期
     */
    @Schema(description = "收款类型 advanced  提前收租天 | fixed 固定当月日期 日 | prefixed 固定上月日期")
    @NotNull(message = "收款类型不能为空")
    private String rentPayWay;

    /**
     * 收款日期
     */
    @Schema(description = "收款日期")
    @NotNull(message = "收款日期不能为空")
    private Integer advancedDays;

    /**
     * 优惠类型("cycle", u"周期性优惠"),("once", u"一次性优惠")
     */
    @Schema(name = "优惠类型 cycl 周期性优惠 | once一次性优惠 ")
    private String discountSort;
    /**
     * 一次性优惠金额计入首期或末期账单("first", u"计入首期账单"),("last", u"计入末期账单")
     */
    @Schema(name = "一次性优惠金额计入首期或末期账单(\"first\", u\"计入首期账单\"),(\"last\", u\"计入末期账单\")")
    private String discountOrder;
    /**
     * 优惠方式 rate 优惠比例 % | amount 优惠金额 元/月
     */
    @Schema(name = "优惠方式 rate 优惠比例 % | amount 优惠金额 元/月")
    private String discountType;
    /**
     * 优惠值
     */
    @Schema(name = "优惠值")
    private BigDecimal discountValue;

    /**
     * 叠加优惠类型：周期性（cycle）, 一次性（once）
     */
    private String extraDiscountSort;
    /**
     * 周期性优惠优惠方式：按账期（order）,按月租金(rent)
     */
    private String extraDiscountType;
    /**
     * 一次性优惠计入账单：计入首次(first), 计入末次(last)
     */
    private String extraDiscountOrder;
    /**
     * 周期性优惠值
     */
    private BigDecimal extraDiscountValue;

    /**
     * 客户类型 personal 个人客户 | company 企业客户
     */
    @Schema(description = "客户类型 personal 个人客户 | company 企业客户")
    private String customerType;
    /**
     * 企业客户费用承担方式 1 企业承担全部 2 企业承担租金押金
     */
    @Schema(description = "企业客户费用承担方式")
    private Integer orderShareMethod;

    /**
     * 账单承担人 0 个人 1 企业
     * */

    private Integer roommateId;
    /**
     * 费项
     */
    @Schema(description = "费项")
    private List<OrderFeesVo> orderFeesVo;

    /**
     * 预定金对象
     * */
    @Schema(description = "费项")
    private Booking booking;

    /**
     * 审批状态(notReview  无需审核|inReview 审核中|effective 已生效|(reject 已驳回)
     */
    private String approvedStatus;

    /**
     * 个人客户时不为空, 租户ID
     */
    private Long memberId;
    /**
     * 经办人名
     */
    private String operatorName;

    /**
     * 备注
     */
    private String remark;

    /**
     * 工单id
     */
    @Schema(description = "工单id")
    private Long sowTicketId;

    /**
     * 是否统一定价
     */
    private Boolean isUnifiedPricing;

    /**
     * 押金规则  0 按照租金原价 1按照租金原价加押金
     */
    private String isOriginalDeposit;

    /**
     * 企业房间id
     */
    private List<Long> roomIds;

    /**
     * 押几
     */
    private Integer payMethodY;

    /**
     * 账单生成规则 0按合同周期生成账单 1按自然月生成账单
     */
    private Integer billRules;


    /**
     * 免租期 0无,1前置, 2后置
     */
    @Schema(description = "免租期")
    private Integer rentFreePeriod = 0;

    /**
     * 免租期天数
     */
    @Schema(description = "免租期天数")
    private String rentFreePeriodDay;
}
